 import 'dart:async';
import 'model/epc_data.dart';

class EpcManager {
  static final EpcManager _instance = EpcManager._internal();
  factory EpcManager() => _instance;
  EpcManager._internal();

  final Map<String, EpcData> _epcMap = {};
  final _epcController = StreamController<List<EpcData>>.broadcast();

  Stream<List<EpcData>> get epcStream => _epcController.stream;

  void addEpc(String epc, {String? tid}) {
    if (_epcMap.containsKey(epc)) {
      _epcMap[epc]!.count++;
    } else {
      _epcMap[epc] = EpcData(epc: epc, tid: tid);
    }
    _notifyListeners();
  }

  void clearEpcData() {
    _epcMap.clear();
    _notifyListeners();
  }

  List<EpcData> getAllEpcData() {
    return _epcMap.values.toList();
  }

  void _notifyListeners() {
    _epcController.add(_epcMap.values.toList());
  }

  void dispose() {
    _epcController.close();
  }
}